package org.example.algorithm;

/**
 * 位 1 的个数:
 * 编写一个函数，输入是一个无符号整数（以二进制串的形式），返回其二进制表达式中数字位数为 '1' 的个数（也被称为 汉明重量).）。
 */

public class HammingWeightSolution {
    public static void main(String[] args)
    {
        System.out.print(hammingWeight(-3));
    }

    // you need to treat n as an unsigned value
    public static int hammingWeight(int n) {
        int weight = 0;
        for (int i=0;i<=31;i++) {
            if ((n & (1 << i)) != 0) {
                weight++;
            }
        }
        return weight;
    }

    //利用位运算性质n & (n-1)会把n的最低位的1变为0
    public static int hammingWeight2(int n) {
        int weight = 0;
        while (n != 0) {
            n &= n-1;
            weight++;
        }
        return weight;
    }
}
